package net.atos.java.example.boodschappen.persistence;

import java.util.List;

import net.atos.java.example.boodschappen.model.Entity;

/**
 * Beschrijft een repository.
 * 
 * @author Pal Hargitai
 * @param <Identifier> De entiteit identificatie.
 * @param <PersistentEntity> De entiteit.
 */
public interface Repository<Identifier, PersistentEntity extends Entity<Identifier>> {

	/**
	 * Alle elementen ophalen.
	 * @return Alle elementen.
	 */
	List<PersistentEntity> allenOphalen();
	/**
	 * Element op basis van identificatie ophalen.
	 * @param identificatie De identificatie.
	 * @return De persistente entiteit.
	 */
	PersistentEntity ophalen(Identifier identificatie);

	/**
	 * Slaat de entiteit op.
	 * @param entiteit De entiteit.
	 * @return De identificatie.
	 */
	Identifier opslaan(PersistentEntity entiteit);

	/**
	 * Bewerkt de entiteit.
	 * @param entiteit De te bewerken entiteit.
	 */
	void bewerken(PersistentEntity entiteit);

	/**
	 * Verwijdert de entiteit.
	 * @param identificatie De identiteit van de te verwijderen entiteit.
	 */
	void verwijderen(Identifier identificatie);
}
